package proyecto.ort.edu.uy.dominio;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "AREAS_TRABAJO")
@SequenceGenerator(name = "AREA_TRABAJO_SEQ", sequenceName = "AREA_TRABAJO_SEQ")
public class AreaDeTrabajo implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2033274760764428471L;

	private String descripcion;

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	@ManyToOne
	@JoinColumn(name = "id_Empresa")
	private Empresa empresa;

	@Column(name = "fecha_Creacion")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechaCreacion;

	@Column(name = "fecha_Modificacion")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fechaModificacion;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "AREA_TRABAJO_SEQ")
	private Long idAreaDeTrabajo;

	private String imagen;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "AREATRABAJO_GRUPOUSUARIOS", joinColumns = @JoinColumn(name = "idArea"), inverseJoinColumns = @JoinColumn(name = "idGruposUsuarios"))
	private List<GrupoUsuario> lstGrupoUsuarios;

	@OneToMany()
	@JoinTable(name = "NOTAS_AREATRABAJO", joinColumns = @JoinColumn(name = "idArea"), inverseJoinColumns = @JoinColumn(name = "idNota"))
	private List<Nota> lstNotas;

	@Column(name = "nom_AreaDeTrabajo")
	private String nombre;

	@OneToMany()
	@JoinTable(name = "TAREAS_AREATRABAJO", joinColumns = @JoinColumn(name = "idArea"), inverseJoinColumns = @JoinColumn(name = "idTarea"))
	private List<Tarea> lstTareas;

	public List<Tarea> getLstTareas() {
		return lstTareas;
	}

	public void setLstTareas(List<Tarea> lstTareas) {
		this.lstTareas = lstTareas;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public Long getIdAreaDeTrabajo() {
		return idAreaDeTrabajo;
	}

	public String getImagen() {
		return imagen;
	}

	public List<GrupoUsuario> getLstGrupoUsuarios() {
		return lstGrupoUsuarios;
	}

	public List<Nota> getLstNotas() {
		return lstNotas;
	}

	public String getNombre() {
		return nombre;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public void setIdAreaDeTrabajo(Long idAreaDeTrabajo) {
		this.idAreaDeTrabajo = idAreaDeTrabajo;
	}

	public void setImagen(String imagen) {
		this.imagen = imagen;
	}

	public void setLstGrupoUsuarios(List<GrupoUsuario> lstGrupoUsuarios) {
		this.lstGrupoUsuarios = lstGrupoUsuarios;
	}

	public void setLstNotas(List<Nota> lstNotas) {
		this.lstNotas = lstNotas;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getIdNombre() {
		return "Id" + idAreaDeTrabajo;
	}

	public String getdescripcionCorta() {
		String retorno;
		if (this.descripcion != null && this.descripcion.length() > 100) {
			retorno = this.descripcion.substring(0, 100);
			retorno += "...";
		} else {
			retorno = this.descripcion;
		}
		return retorno;
	}
}
